COM306のサンプルアプリのコールドスタート時のパフォーマンスを測定してみた
はじめに
前回構築したアプリケーションをSAR-measure-cold-startでベンチマークしてみます。 SAR-measure-cold-startはLambda関数のコールドスタート時のパフォーマンスを測定するOSSのツールです。
ツール
COM306では以下の2つのベンチマークツールが紹介されていました。
今回はSAR-measure-cold-startを試してみます。
デプロイ
こちらのページの「Deploy」ボタンからデプロイできます。
実行例
作成されるStep Functionsのステートマシンにパラメータを指定して実行します。
ドキュメントに従って以下のようなパラメータで実行します。
Payload
はAPI Gatewayから送信されるイベントから必要な部分だけを抜粋しています。
/buckets-pythonの実行例
{ "functionName": "s3-admin-ListBucketsPython-FBl1ffItnuYj", "count": 100, "payload": "{\"type\": \"REQUEST\", \"resource\": \"/buckets-python\", \"path\": \"/buckets-python\", \"httpMethod\": \"GET\", \"headers\": {}, \"queryStringParameters\": {}, \"pathParameters\": {}}" }
実行結果はステートマシンの出力として以下のようなJSONで得られます。
{ "functionName": "s3-admin-ListBucketsPython-FBl1ffItnuYj", "note": "The values include both DURATION as well as INIT DURATION", "result": [ { "functionName": "s3-admin-ListBucketsPython-FBl1ffItnuYj", "memorySize": 128, "coldStarts": 36, "min": 3904.21, "p25": 4126.27, "median": 4215.19, "p75": 4307.35, "p95": 4462.94, "max": 4657.02, "stddev": 158.2016 } ] }
次のようなワンライナーで整形しスプレッドシートに貼り付けられます。
jq -r '.result[] | [.coldStarts,.functionName,.max,.median,.memorySize,.min,.p25,.p75,.p95,.stddev] | @tsv'
実行結果
Rust およびPythonの各実装での実行結果は以下の通りです。
functioName | memorySize | coldStarts | min | p25 | median | p75 | p95 | max | stddev |
---|---|---|---|---|---|---|---|---|---|
s3-admin-ListBucketsRust-Skixu32S4m77 | 128.00 | 90.00 | 1,025.26 | 1,231.88 | 1,258.11 | 1,291.68 | 1,354.99 | 1,490.81 | 64.70 |
s3-admin-ListBucketsPython-FBl1ffItnuYj | 128.00 | 88.00 | 3,692.48 | 4,052.09 | 4,128.15 | 4,183.66 | 4,254.29 | 4,311.06 | 116.21 |
Rust実装の方が実行時間が短く実行時間の分散も小さくなっていることがわかります。
まとめ
SAR-measure-toolでRust/Pythonでの各実装のコールドスタート時のパフォーマンスを測定してみました。